package com.dims_hsrc.data.mapper;

import java.util.List;
import com.dims_hsrc.data.domain.DataFunctionMapping;
import com.dims_hsrc.data.domain.DataFunctionMappingResult;

/**
 * 函数映射配置Mapper接口
 * 
 * @author 赵浩然
 * @date 2023-07-15
 */
public interface DataFunctionMappingMapper 
{
    /**
     * 查询函数映射配置列表
     * 
     * @param dataFunctionMapping 函数映射配置
     * @return 函数映射配置集合
     */
    public List<DataFunctionMapping> selectDataFunctionMappingList(DataFunctionMapping dataFunctionMapping);

    /**
     * 查询函数映射配置
     * 
     * @param id 函数映射配置主键
     * @return 函数映射配置
     */
    public DataFunctionMapping selectDataFunctionMappingById(String id);
    
    /**
     * 根据需求ID查询函数映射
     * 
     * @param sdid 需求ID
     * @return 函数映射配置集合
     */
    public List<DataFunctionMapping> selectDataFunctionMappingBySdid(String sdid);
    
    /**
     * 根据指标ID查询函数映射
     * 
     * @param siid 指标ID
     * @return 函数映射配置集合
     */
    public List<DataFunctionMapping> selectDataFunctionMappingBySiid(String siid);
    
    /**
     * 根据需求ID和指标ID查询函数映射
     * 
     * @param sdid 需求ID
     * @param siid 指标ID
     * @return 函数映射配置
     */
    public DataFunctionMapping selectDataFunctionMappingBySdidAndSiid(String sdid, String siid);
    
    /**
     * 根据结构ID查询函数映射
     * 
     * @param sid 结构ID
     * @return 函数映射配置集合
     */
    public List<DataFunctionMapping> selectDataFunctionMappingBySid(String sid);

    /**
     * 新增函数映射配置
     * 
     * @param dataFunctionMapping 函数映射配置
     * @return 结果
     */
    public int insertDataFunctionMapping(DataFunctionMapping dataFunctionMapping);

    /**
     * 修改函数映射配置
     * 
     * @param dataFunctionMapping 函数映射配置
     * @return 结果
     */
    public int updateDataFunctionMapping(DataFunctionMapping dataFunctionMapping);

    /**
     * 删除函数映射配置
     * 
     * @param id 函数映射配置主键
     * @return 结果
     */
    public int deleteDataFunctionMappingById(String id);

    /**
     * 批量删除函数映射配置
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteDataFunctionMappingByIds(String[] ids);

    /**
     * 检查数字类型需求是否已被函数映射
     * 
     * @param sdid 结构需求ID
     * @return 映射数量
     */
    public int checkDemandMapped(String sdid);

    /**
     * 检查数字类型技术指标是否已被函数映射
     * 
     * @param siid 结构技术指标ID
     * @return 映射数量
     */
    public int checkIndicatorMapped(String siid);
    
    /**
     * 通过技术指标ID检查是否存在函数映射
     * 
     * @param iid 技术指标ID
     * @return 映射数量
     */
    public int checkIndicatorMappedByIid(String iid);

    /**
     * 根据结构ID查询所有已映射的数字类型需求和技术指标
     * 
     * @param sid 结构ID
     * @return 映射列表
     */
    public List<DataFunctionMapping> getNumTypeMappingsBySid(String sid);

    /**
     * 批量插入函数映射
     * 
     * @param mappingList 函数映射列表
     * @return 结果
     */
    public int batchInsertDataFunctionMapping(List<DataFunctionMapping> mappingList);
    
    /**
     * 根据结构ID获取函数映射结果
     * 
     * @param sid 结构ID
     * @return 函数映射结果列表
     */
    public List<DataFunctionMappingResult> getFunctionMappingResultBySid(String sid);
    
    /**
     * 获取特定函数映射的详细信息
     * 
     * @param id 映射ID
     * @return 函数映射结果
     */
    public DataFunctionMappingResult getFunctionMappingResultById(String id);
    
    /**
     * 检查某个需求和技术指标的组合是否已经存在函数映射
     * 
     * @param sid 结构ID
     * @param sdid 结构需求ID
     * @param siid 结构技术指标ID
     * @return 映射数量
     */
    public int checkFunctionMappingExists(String sid, String sdid, String siid);

    /**
     * 根据技术指标ID删除所有函数映射
     * 
     * @param siid 技术指标ID
     * @return 结果
     */
    public int deleteDataFunctionMappingBySiid(String siid);

    /**
     * 根据多个技术指标ID批量删除函数映射
     * 
     * @param siids 技术指标ID数组
     * @return 结果
     */
    public int deleteDataFunctionMappingBySiids(String[] siids);
    
    /**
     * 根据计数值查询函数映射
     * 
     * @param cnt 计数值
     * @return 函数映射列表
     */
    public List<DataFunctionMapping> selectDataFunctionMappingByCnt(Integer cnt);
    
    /**
     * 根据计数阈值查询函数映射
     * 
     * @param threshold 计数阈值
     * @return 函数映射列表
     */
    public List<DataFunctionMapping> selectDataFunctionMappingByCntGreaterThan(Integer threshold);
    
    /**
     * 增加指定映射的计数值
     * 
     * @param id 映射ID
     * @return 结果
     */
    public int incrementMappingCnt(String id);
    
    /**
     * 设置指定映射的计数值
     * 
     * @param id 映射ID
     * @param cnt 计数值
     * @return 结果
     */
    public int updateMappingCnt(String id, Integer cnt);
    
    /**
     * 重置所有映射的计数值
     * 
     * @return 结果
     */
    public int resetAllMappingCnt();
}